<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>
BeanShell Konsolu iletişim
</title>
</head>
<body bgcolor="#ffffff">
<h1>BeanShell Konsolu iletişim</h1>
<h3>Giriş / BeanShell Nedir</h3>
<p>
<a href="http://www.beanshell.org/">BeanShell</a>, BeanShell komut dosyalarını uygulamak için kullanılabilen interaktif bir Java kabuğudur. Bu scriptler Java söz diziminden birçok eleman kullanan Javanın basitleştirilmiş bir formudur fakat daha basit bir scriptleme formatındadır. Bütün Java kodları, BeanShell kodu olarak ta geçerlidir.
OWASP ZAP'te BeanShell entegrasyonu size ZAP fonksiyonlarını ve veri setini kullanarak scriptler yazma imkanı tanır. Bu web uygulamalarını analiz etmek için çok güçlü bir özellik olabilir.
</p>
<h3>BeanShell Konsolu</h3>
<p>
Bu konsol Araçlar menüsünden başlatılır ve orta yarısı interaktif BeanShell konsolu ve aşağı yarısı basit bir metin düzenleyici olan bir bölünmüş ekran içerir. Karmaşık yazılımlar için, Java editörü kullanmanızı tavsiye ediyoruz.  Scriptler düzenleyiciden yüklenebilir, kaydedilebilir ve değerlendirilebilir.
</p>
<p>
BeanShell başladığında ZAP'tan birkaç nesne kullanıma hazır haldedir, şöyle ki:
<ul>
<li>the <i>Model</i> singleton, through the object named <b><i>model</i></b></li>
<li>site Ağacı site nesnesi aracılığıyla mevcut sitelerin ağacı</li>
<li>anlık <i>HttpSender</i> through the <b><i>sender</i></b> nesnesi</li>
</ul>
<p>
BeanShell'in esnek bir şekilde yazılmış olduğuna dikkat edin. Bu nedenle, değişkenleri kullanmadan önce bildirmek gerekli değildir – bu komut dosyaları normal Java'ya göre biraz daha özlü yapar. Tabii ki, türünü tanımlamak isterseniz yapabilirsiniz.
</p>
<h3>Site Haritası Kullanımı</h3>
<p>
Yararlı ve tipik bir şeyle başlayalım: Tüm site düğümlerini tekrarlayın ve dosyanın varlığını kontrol edin. Bunu başaran bir komut dosyası oluşturulmuş, <i>Yükle</i>'yi seçin ve <i>example.tree.bsh</i> dosyasını seçin.
</p>
<pre>
import org.apache.commons.httpclient.URI;
import org.parosproxy.paros.network.HttpMessage;
import org.parosproxy.paros.model.*;

Tree () {
	
	find (SiteNode node, String resource) {
		if (node == null) return;
		ref = node.getHistoryReference();
		if ((ref != null) &amp;&amp; (!node.isLeaf())) {
			checkExists(ref, resource);    
		}
		for (i=0;i&lt;node.getChildCount();i++) {   
			try {
				find (node.getChildAt(i), resource);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	checkExists(ref, resource) {
		u = ref.getHttpMessage().getRequestHeader().getURI().toString() + "/" + resource;
		msg = ref.getHttpMessage();
		msg.getRequestHeader().setURI(new URI(u));
		sender.sendAndReceive(msg, true);
		if (msg.getResponseHeader().getStatusCode() == 200) {
			print("Found: "+msg.getRequestHeader().getURI().toString());
		}
	}

	return this;
}
</pre>
<p>
Değerlendir'i tıklamadan önce, ağacı doldurabilmek için ZAP ile bir siteyi çalıştırın:
</p>
<p>
Şimdi, düzenleyicideki senaryoyu yürütmek için değerlendirmeye tıklayın. Herhangi bir hata yoksa, şu komutları kullanarak komut dosyasında tanımlanan öğeyi kullanmaya başlayabilirsiniz:
</p>
<pre>
t = Tree();
</pre>
<p>
Bu, yeni bir Ağaç nesnesi ortaya çıkar ve oluşturduğu bu nesneye <i>t</i> referansını atar.
</p>
<pre>
t.find(sites.getRoot(), "index.html");
</pre>
<p>
İlk argüman olarak <i>SiteNode</i> 'i ve ikincisini bulmak için bir kaynak olan t üzerindeki <i>find</i> yöntemini uygulayın. Bu durumda, yöntem ağacın tüm düğümleri süresince tekrarlanacaktır, çünkü kökten itibaren başladık ve index.html dosyalarını bulacağız.
</p>
<p>
Tüm düğümlerde bunu tekrarlamak yerine, <i>findChild</i> yöntemini kullanarak belirli bir düğüm başlatmayı da düşünebiliriz.
</p>
<p>
Bu, ZAP'da bulunan BeanShell'in gücü hakkında bizlere bir fikir verecektir. Ancak tam kapasiteli faydalanmak için dahili API ve BeanShell'in özelliklerini kullanmayı öğrenmeniz gerekecektir. BeanShell, tüm iç objelere ve yöntemlere - hatta özel olanlara bile - tam erişim izni verecek şekilde kurulmuştur.
</p>
<h3>Basit HTTP isteği</h3>
<p>
Bir sonraki örnekte, interaktif konsolda doğrudan bir HTTP isteği oluşturup gönderiyoruz:
</p>
<pre>
TBD
</pre>
<p>
BeanShell'in gücünü tam olarak kullanmak için, ZAP'ın içeriklerine aşina olmalısınız. <i>Gönderen</i> nesnesi <a href="man_req.html">Manuel İstek Düzenleyici</a> tarafından kullanılanla aynı örneğidir ve bu nedenle otomatik olarak ZAP yapılandırmasında ayarlanan proxy ayarlarını kullanır.
</p>
<pre>
TBD
</pre>
<h3>İpuçları</h3>
<p>
<i>unset(String)</i> komutunu atadığınız değişkenleri, methodları veya nesneleri sıfırlamak icin kullanın. Geçerli isim alanında bir metot deklarasyonu değiştirmek isterseniz bu kullanışlıdır. Komutun argüman olarak Object değil String aldığına dikkat edin, buna göre yukarıda kullandığımız <i>t<i> ı kurmayı geri alın, <i>unset("t");</i> olmalı, <0>unset(t);</i> değil
</p>
<h2>Üzerinden erişildi</h2>
<table>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="../tlmenu/tools.html">Üst seviye Araçlar menüsü</a></td><td>'BeanShell Konsol' menü öğesi</td></tr>
</table>

<h2>Ayrıca bakın</h2>
<table>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="../overview.html">Kullanıcı Arayüzüne Genel Bakış</a></td><td>kullanıcı arayüzünün genel bir görünümü için</td></tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
<a href="dialogs.html">Diyaloglar</a></td><td>diyalogların ve açılır pencerelerin ayrıntıları için </td></tr>
</table>

</body>
</html>
